/**
 * 节点基本类型
 * 
 * 开发者   : Marco
 * 创建时间 : 2016年9月1日, 下午5:57
 */

#ifndef __MARCOPP_NODE_BASE_H__
#define __MARCOPP_NODE_BASE_H__

namespace marco {
namespace node {

class base {
public:
    explicit base(const char* name, unsigned int id, int index) throw () ;
    explicit base(const char* name, unsigned int id) throw () ;
    base(const base& orig) throw () ;	    // 拷贝构造
    base& operator=(const base& orig) throw () ; // 拷贝赋值运算符重载
#if (__cplusplus >= 201103L)
    base(base&& orig) throw () ; // 移动构造
    base& operator=(base&& orig) throw () ; // 移动赋值运算符重载
#endif
    virtual ~base(void);

    int get_value(void) const throw ()  { return val_; }
    void set_value(int value) throw ()  { val_ = value; }
    unsigned int get_id(void) const throw ()  { return id_; }
    void set_id(unsigned int id) throw () { id_ = id; }
    const char* get_name(void) const throw () { return name_; }
    void set_name(const char* name) throw () { set_string(name_, name); }
    
    static void set_string(char*& old_ptr, const char* string) throw () ; // 设置字符串指针信息

private:
    unsigned int    id_; // ID
    int		    val_; // 值, 为了不浪费空间, 允许存储一个4字节值
    char*	    name_; // 名称
};

} // namespace node
} // namespace marco
#endif /* __MARCOPP_NODE_BASE_H__ */

